#include "conexionesPFS.h"

t_array *arrayConexiones;

int crearPoolDeConecciones(){

	t_config *config = pfs->configArch;
	int cantConex = 0;

	arrayConexiones = array_create(config->maxConections);
	for (cantConex = 0; cantConex <= config->maxConections; cantConex++){
		t_elemConexion *elemConex = generarElementoConexion();
		if (elemConex->socket == NULL){
			/*Logeo error de coenxion*/
		}
		array_set(arrayConexiones, cantConex, (void*)elemConex, (void*)destroyElementoConexion);
	}
	return 0;/*WTF??*/
}

/*
 * Envio mi peticion al disco
 * <return> char* que recibo del la peticion del disco
 */
char *comunicacionConDisco(char* data){
	t_socket_buffer *buffer;
	int enviado = 0;
	t_elemConexion *elem = (t_elemConexion*)array_find(arrayConexiones,(void*)elementoDisponible);
	if (elem != NULL){

		enviado = sockets_sendString(elem->socket, data);
		if (enviado > 0){
			buffer = sockets_recv(elem->socket);
			if (buffer == NULL){

				/*Es un problema pq me vino NULL*/
			}
		}
		else{

		}
	}
	else{
		/*Logeo error*/
		/*Ver que hago cuando no encuentro un socket para enviar*/
		sleep(1);
	}

	return buffer->data;
}

int *elementoDisponible(t_elemConexion *elem){
	return elem->enUso == 0;
}

t_elemConexion *generarElementoConexion(char* myIp, char*ip, int puerto){
	t_elemConexion *elem = (t_elemConexion*)malloc(sizeof(t_elemConexion));
	elem->enUso = 0;
	t_socket_client *client = sockets_createClient(myIp, puerto);
	elem->socket = sockets_connect(client,ip, puerto);

	return elem;
}

void *destroyElementoConexion(t_elemConexion *elemConex){

}

